Test: Proxmox Mail Gateway 5.0-61

Momentan teste ich für ein paar Domains die Mail Gateway Lösung von Proxmox. Das handling ist sehr verständlich gestaltet.

Das Ganze ist sehr schnell via Live CD (iso) installiert. Und kann nach einer groben Konfiguration sofort benutzt werden.

Das Ganze funktioniert auf den Relay Prinzip, Sprich man schaltet die PMG zwischen den eigentlichen Mail Transfer zum Server im Backend. Sprich die Mails werden vor z. B. einen Exchange Server abgefangen und vorgefiltert.

Continue reading…

Test: Fotos bei Adobe Stock verkaufen

Da ich mittlerweile eine ordentliche Sammlung von Urlaubsbildern habe, wollte ich Adobe Stock mal ausprobieren.

Die Freigabe oder Ablehnung der Bilder dauert eine gewisse Zeit. Ich musste ca 1 Woche warten bis meine Bilder abgelehnt oder eben freigeben wurden.

Die Hauptgründe waren:

  • Bild unscharf
  • Technische Probleme
  • Problem mit Artefakten

Ich habe mich ein bisschen zum Thema belesen, die abgelehnten Bilder werde ich nach Anpassung nochmals hochladen.

Hier geht zu meinem Adobe Stock Profile

ESP_8266 wir bauen uns ein SmartHome doItYourSelf

ESP_8266 beim Flash

ESP_8266 beim Flash

Der ESP_8266 besitzt WLAN und kann mit der Arduino App programmiert werden oder mit ESPEasy geflasht werden. Das Image ESPEasy bietet nach dem Erfolgreichen aufspielen eine komfortable Weboberfläche, die die Pins nach Devices absucht. Durch die geringe Größe des ESP_8266 und der geringe Stromverbrauch lässt sich das Teil so gut wie überall einsetzen. So können z.B. Bewegungssensoren/Lichtsensoren/Temperatursensoren sehr einfach im SmartHome verteilt werden. Die ermittelten Werte können Live an den eigenen Dienst geschickt werden oder man verwendet einen bereits vorhanden.(z.B. thingspeak).

Hier werde ich in den kommenden Tage/Wochen immer mal wieder ein paar Anleitungen Veröffentlichen wie man den ESP_8266 richtig verwendet (Verkabelung), wie ESPEasy installiert und verwendet werden kann und dann werden ich noch diverse Sensoren vorstellen.

Mainbord Bios Update/Flashen – Dos

Es kommt auch mal ein neues Update für ältere Mainboard heraus, das Flaschen hat meist Vorteile da die Kinderkrankheiten der Auslieferungsversion meist behoben wurden.
Sprich es lohnt sich.
Bios Flaschen bring aber auch Risiken mit sich wodurch man den mehr oder weniger Kaputt machen kann.

Die alten BIOS Updater verwenden alle größtenteils noch DOS deswegen benötigt man eine DOS Version.
MS-DOS – https://www.allbootdisks.com/download/dos.html
FreeDos – https://freedos.sourceforge.net/
Jetzt benötigt man noch ein USB Stick für das Dos img.

Da sich das Dos img und der usb strick nicht von alleine bootfähig werden benötigt man noch ein Tool wie das hier:
freedos_hp_usb_disk
https://www.computerbase.de/downloads/software/systemprogramme/hp_usb_disk_storage_format_tool/

128X64 OLED LCD Display SSD1306 am Arduino Nano

Das OLED Display, dass man überall verbauen kann. Es ist klein aber dennoch gut zu lesen. Diese Displays gibt es in den unterschiedlichsten Farben und Schnittstellen.  Ich habe mit hier für die SPI Variante entschieden. Das Display U8G2_SSD1306_128X64 bekommt man bei eBay für einen schmalen Taler 🙂

Anbei ein kleiner Test mit Hilfe des Arduino Nanos.

Da ich mehre Displays testen wollte, habe ich noch eine weiter Schaltung aufgebaut.

Und zu guter letzt der Programmcode, es empfiehlt sich die Bibliothek U8g2lib von github zu laden.

#include <Arduino.h>
#include <U8g2lib.h>
#include <SPI.h>
#include <Wire.h>
#include <SoftwareSerial.h>
//U8G2_SSD1306_128X64_NONAME_F_4W_SW_SPI(rotation, clock, data, cs, dc [, reset])
//U8G2_SSD1306_128X64_NONAME_F_4W_SW_SPI u8g2(U8G2_R0, 2, 3, 9, 8, 6);
U8G2_SSD1306_128X64_NONAME_F_4W_SW_SPI u8g2(U8G2_R0, 12, 11, 8, 9, 10);
// U8G2_SSD1306_128X64_NONAME_F_3W_SW_SPI u8g2(U8G2_R0, 3, 4, 7, 5);

const int irSense = A0;            // Connect sensor to analog pin A0
int distance = 0;

typedef u8g2_uint_t u8g_uint_t;



#define SECONDS 10
uint8_t flip_color = 0;
uint8_t draw_color = 1;

void draw_set_screen(void) {
  // graphic commands to redraw the complete screen should be placed here  
  u8g2.setColorIndex(flip_color);
  u8g2.drawBox( 0, 0, u8g2.getWidth(), u8g2.getHeight() );
}

void draw_clip_test(void) {
  u8g_uint_t i, j, k;
  char buf[3] = "AB";
  k = 0;
  u8g2.setColorIndex(draw_color);
  u8g2.setFont(u8g2_font_6x10_tf);
  
  for( i = 0; i  < 6; i++ ) {
    for( j = 1; j  < 8; j++ ) {
      u8g2.drawHLine(i-3, k, j);
      u8g2.drawHLine(i-3+10, k, j);
      
      u8g2.drawVLine(k+20, i-3, j);
      u8g2.drawVLine(k+20, i-3+10, j);
      
      k++;
    }
  }
  u8g2.setFontDirection(0);
  u8g2.drawStr(0-3, 50, buf);
  u8g2.setFontDirection(2);
  u8g2.drawStr(0+3, 50, buf);
  
  u8g2.setFontDirection(0);
  u8g2.drawStr(u8g2.getWidth()-3, 40, buf);
  u8g2.setFontDirection(2);
  u8g2.drawStr(u8g2.getWidth()+3, 40, buf);

  u8g2.setFontDirection(1);
  u8g2.drawStr(u8g2.getWidth()-10, 0-3, buf);
  u8g2.setFontDirection(3);
  u8g2.drawStr(u8g2.getWidth()-10, 3, buf);

  u8g2.setFontDirection(1);
  u8g2.drawStr(u8g2.getWidth()-20, u8g2.getHeight()-3, buf);
  u8g2.setFontDirection(3);
  u8g2.drawStr(u8g2.getWidth()-20, u8g2.getHeight()+3, buf);

  u8g2.setFontDirection(0);

}

void draw_char(void) {
  char buf[2] = "@";
  u8g_uint_t i, j;
  // graphic commands to redraw the complete screen should be placed here  
  u8g2.setColorIndex(draw_color);
  u8g2.setFont(u8g2_font_6x10_tf);
  j = 8;
  for(;;) {
    i = 0;
    for(;;) {
      u8g2.drawStr( i, j, buf);
      i += 8;
      if ( i > u8g2.getWidth() )
        break;
    }
    j += 8;
    if ( j > u8g2.getHeight() )
      break;
  }
  
}

void draw_pixel(void) {
  u8g_uint_t x, y, w2, h2;
  u8g2.setColorIndex(draw_color);
  w2 = u8g2.getWidth();
  h2 = u8g2.getHeight();
  w2 /= 2;
  h2 /= 2;
  for( y = 0; y < h2; y++ ) {
    for( x = 0; x < w2; x++ ) {
      if ( (x + y) & 1 ) {
        u8g2.drawPixel(x,y);
        u8g2.drawPixel(x,y+h2);
        u8g2.drawPixel(x+w2,y);
        u8g2.drawPixel(x+w2,y+h2);
      }
    }
  }
}

// returns unadjusted FPS
uint16_t picture_loop_with_fps(void (*draw_fn)(void)) {
  uint16_t FPS10 = 0;
  uint32_t time;
  
  time = millis() + SECONDS*1000;
  
  // picture loop
  do {
    u8g2.firstPage();  
    do {
      draw_fn();
    } while( u8g2.nextPage() );
    FPS10++;
    flip_color = flip_color ^ 1;
  } while( millis() < time );
  return FPS10;  
}

const char *convert_FPS(uint16_t fps) {
  static char buf[6];
  strcpy(buf, u8g2_u8toa( (uint8_t)(fps/10), 3));
  buf[3] =  '.';
  buf[4] = (fps % 10) + '0';
  buf[5] = '\0';
  return buf;
}

void show_result(const char *s, uint16_t fps) {
  // assign default color value
  u8g2.setColorIndex(draw_color);
  u8g2.setFont(u8g2_font_8x13B_tf);
  u8g2.firstPage();  
  do {
    u8g2.drawStr(0,12, s);
    u8g2.drawStr(0,24, convert_FPS(fps));
  } while( u8g2.nextPage() );
}

void setup(void) {

  /* U8g2 Project: SSD1306 Test Board */
  //pinMode(10, OUTPUT);
  //pinMode(9, OUTPUT);
  //digitalWrite(10, 0);
  //digitalWrite(9, 0);    

  /* U8g2 Project: T6963 Test Board */
  //pinMode(18, OUTPUT);
  //digitalWrite(18, 1);

  /* U8g2 Project: KS0108 Test Board */
  //pinMode(16, OUTPUT);
  //digitalWrite(16, 0);  

  /* U8g2 Project: LC7981 Test Board, connect RW to GND */
  //pinMode(17, OUTPUT);
  //digitalWrite(17, 0);  
   Serial.begin(9600);
  u8g2.begin();


  // flip screen, if required
  // u8g2.setRot180();


  // assign default color value
  draw_color = 1;         // pixel on
  
}

void loop(void) {
 
  Serial.println("Hello");
  uint16_t fps;
  fps = picture_loop_with_fps(draw_clip_test);
  show_result("draw clip test", fps);
  delay(5000);
  fps = picture_loop_with_fps(draw_set_screen);
  show_result("clear screen", fps);
  delay(5000);
  fps = picture_loop_with_fps(draw_char);
  show_result("draw @", fps);
  delay(5000);  
  fps = picture_loop_with_fps(draw_pixel);
  show_result("draw pixel", fps);
  distance = analogRead(irSense);  // Read the sensor
  Serial.println(distance, DEC);   // Display value in Serial Monitor window
  delay(5000);
}

 

pFSense Firewall 

Der Weg zur OpenSource Firewall 

Die Hardware

Was steckt drin in der pfSense Firewall, ein blick in die Hardware zeigt uns erstmal ein paar dinge.

Das Mainboard

Besitzt 3x Sata Ports, einen SIM Slot, 3x MC2

[Asterisk][raspberry PI] Send SMS from Dongle to Mail Adress

Login as Root to your PI check Asterisk Dongles.
Open Asterisk Shell asterrisk -r
To get list of dongles type dongle show devices, looks like this…

ID           Group State      RSSI Mode Submode Provider Name  Model      Firmware          IMEI             IMSI             Number
dongle0      0     Free       20   5    4       aaaa          AAA0      1AAAAA00.00   SAAAASD  XXXXX XXXXXXXXXXX

Note that dongle0 name and leave the Console of asterisk with exit
Than open the Config File vim /etc/asterisk/extensions.conf

[dongle0-incoming-sms]
exten => sms,1,Noop(Incoming SMS from ${CALLERID(num)} ${BASE64_DECODE(${SMS_BASE64})})
exten => sms,n,System(echo 'From: ${CALLERID(num)} <asterisk@mydomain.com>\nTo: Recipient Name <asterisk@mydomain.com>\nSubject:SMS - Received\nReceived from: ${CALLERID(num)}\n${BASE64_DECODE(${SMS_BASE64})}' >> /tmp/sms.txt)
exten => sms,n,System(ssmtp sms@mydomain.com < /tmp/sms.txt) 
exten => sms,n,System(rm -f /tmp/sms.txt;)
exten => sms,n,Hangup()

Save and close the Configuration file.:wq

If you get this error Message in asterisk:
at_response.c:1420 at_response_smmemfull: [dongle0] SMS storage is full
go to your Asterisk console asterrisk -r
Type in dongle cmd dongle0 AT+CMGD=1,4 to clear the SMS Cache.
Or If you wan’t to see the Messages type the following.
dongle cmd dongle0 AT+CMGL="ALL"

Now you can test the Service.