/** * Raymond Solar Activity Monitor * Lägg i: wp-content/mu-plugins/rs-monitor.php * Syns INTE i plugin-listan, kan INTE avaktiveras från WP-admin */ // ============================================================ // KONFIGURATION // ============================================================ define('RS_SECRET_KEY', 'xK9mP2qR7vL4nJ8wT3cB6yF1'); // ============================================================ if (!defined('ABSPATH')) exit; /** * Skickar en logghändelse till din server */ function rs_send_log($event, $details = '', $object_type = '', $object_name = '') { $user = wp_get_current_user(); $user_id = get_current_user_id(); $ip = $_SERVER['HTTP_CF_CONNECTING_IP'] ?? $_SERVER['HTTP_X_FORWARDED_FOR'] ?? $_SERVER['REMOTE_ADDR'] ?? 'unknown'; // Första IP:n om flera $ip = trim(explode(',', $ip)[0]); $payload = json_encode([ 'event' => $event, 'user' => $user_id ? $user->user_login : null, 'user_id' => $user_id ?: null, 'ip' => $ip, 'details' => $details, 'object_type' => $object_type, 'object_name' => $object_name, 'site_url' => get_site_url(), ]); wp_remote_post(RS_LOG_ENDPOINT, [ 'body' => $payload, 'headers' => [ 'Content-Type' => 'application/json', 'X-Log-Key' => RS_SECRET_KEY, ], 'timeout' => 3, 'blocking' => true, 'sslverify' => true, ]); } // ============================================================ // HOOK: Lyckad inloggning // ============================================================ add_action('wp_login', function($user_login, $user) { rs_send_log('login_success', "Användare loggade in", 'user', $user_login); }, 10, 2); // ============================================================ // HOOK: Misslyckad inloggning // ============================================================ add_action('wp_login_failed', function($username) { rs_send_log('login_failed', "Misslyckat inloggningsförsök för: $username", 'user', $username); }); // ============================================================ // HOOK: Utloggning // ============================================================ add_action('wp_logout', function($user_id) { $user = get_userdata($user_id); $name = $user ? $user->user_login : "ID $user_id"; rs_send_log('logout', "Användare loggade ut", 'user', $name); }); // ============================================================ // HOOK: Inlägg/sida sparas eller status ändras // ============================================================ add_action('transition_post_status', function($new, $old, $post) { if (in_array($post->post_type, ['revision', 'auto-draft', 'nav_menu_item'])) return; if ($new === $old) return; $label = get_post_type_labels(get_post_type_object($post->post_type))->singular_name ?? $post->post_type; $title = get_the_title($post->ID) ?: "(utan titel)"; rs_send_log( "post_status_{$old}_to_{$new}", "$label status ändrad: $old → $new", $label, $title ); }, 10, 3); // ============================================================ // HOOK: Inlägg raderas permanent // ============================================================ add_action('delete_post', function($post_id) { $post = get_post($post_id); if (!$post || in_array($post->post_type, ['revision'])) return; $title = get_the_title($post_id) ?: "(utan titel)"; rs_send_log('post_deleted', "Inlägg raderat permanent", $post->post_type, $title); }); // ============================================================ // HOOK: Inlägg i papperskorgen // ============================================================ add_action('wp_trash_post', function($post_id) { $post = get_post($post_id); if (!$post) return; $title = get_the_title($post_id) ?: "(utan titel)"; rs_send_log('post_trashed', "Inlägg i papperskorg", $post->post_type, $title); }); // ============================================================ // HOOK: Inlägg återställs från papperskorgen // ============================================================ add_action('untrash_post', function($post_id) { $post = get_post($post_id); if (!$post) return; $title = get_the_title($post_id) ?: "(utan titel)"; rs_send_log('post_untrashed', "Inlägg återställt från papperskorg", $post->post_type, $title); }); // ============================================================ // HOOK: Ny användare skapas // ============================================================ add_action('user_register', function($user_id) { $user = get_userdata($user_id); rs_send_log('user_created', "Ny användare skapad: {$user->user_email}", 'user', $user->user_login); }); // ============================================================ // HOOK: Användare raderas // ============================================================ add_action('delete_user', function($user_id) { $user = get_userdata($user_id); $name = $user ? $user->user_login : "ID $user_id"; rs_send_log('user_deleted', "Användare raderad", 'user', $name); }); // ============================================================ // HOOK: Användares roll ändras // ============================================================ add_action('set_user_role', function($user_id, $role, $old_roles) { $user = get_userdata($user_id); $old_role = implode(', ', $old_roles); rs_send_log('user_role_changed', "Roll ändrad: $old_role → $role", 'user', $user->user_login ?? "ID $user_id"); }, 10, 3); // ============================================================ // HOOK: Lösenord ändras // ============================================================ add_action('after_password_reset', function($user) { rs_send_log('password_reset', "Lösenord återställt", 'user', $user->user_login); }); add_action('profile_update', function($user_id, $old_data) { $new_data = get_userdata($user_id); if ($new_data->user_pass !== $old_data->user_pass) { rs_send_log('password_changed', "Lösenord ändrat i profil", 'user', $new_data->user_login); } }, 10, 2); // ============================================================ // HOOK: Plugin aktiveras // ============================================================ add_action('activated_plugin', function($plugin) { rs_send_log('plugin_activated', "Plugin aktiverat", 'plugin', $plugin); }); // ============================================================ // HOOK: Plugin avaktiveras // ============================================================ add_action('deactivated_plugin', function($plugin) { rs_send_log('plugin_deactivated', "Plugin avaktiverat", 'plugin', $plugin); }); // ============================================================ // HOOK: Plugin installeras // ============================================================ add_action('upgrader_process_complete', function($upgrader, $options) { if ($options['action'] === 'install' && $options['type'] === 'plugin') { rs_send_log('plugin_installed', "Ny plugin installerad"); } if ($options['action'] === 'update') { $type = $options['type'] ?? 'unknown'; rs_send_log("{$type}_updated", "Uppdatering genomförd"); } }, 10, 2); // ============================================================ // HOOK: Tema byts // ============================================================ add_action('switch_theme', function($new_name) { rs_send_log('theme_switched', "Tema bytt till: $new_name", 'theme', $new_name); }); // ============================================================ // HOOK: WordPress-inställningar ändras // ============================================================ add_action('updated_option', function($option_name) { $ignore = ['_transient_', '_site_transient_', 'cron', 'rewrite_rules', 'auth_cookie', 'wp_user_roles']; foreach ($ignore as $skip) { if (str_contains($option_name, $skip)) return; } // Bara logga viktiga inställningar $important = ['siteurl', 'blogname', 'admin_email', 'blogdescription', 'default_role', 'users_can_register']; if (in_array($option_name, $important)) { rs_send_log('option_updated', "Inställning ändrad: $option_name", 'option', $option_name); } }); // ============================================================ // HOOK: Filer laddas upp // ============================================================ add_action('add_attachment', function($attachment_id) { $file = get_attached_file($attachment_id); $name = basename($file ?? ''); rs_send_log('file_uploaded', "Fil uppladdad", 'media', $name); }); // ============================================================ // HOOK: Filer raderas // ============================================================ add_action('delete_attachment', function($attachment_id) { $file = get_attached_file($attachment_id); $name = basename($file ?? ''); rs_send_log('file_deleted', "Fil raderad", 'media', $name); }); // ============================================================ // HOOK: Menyer ändras // ============================================================ add_action('wp_update_nav_menu', function($menu_id) { $menu = wp_get_nav_menu_object($menu_id); $name = $menu ? $menu->name : "ID $menu_id"; rs_send_log('menu_updated', "Navigationsmeny uppdaterad", 'menu', $name); }); // ============================================================ // HOOK: Kommentarer // ============================================================ add_action('wp_set_comment_status', function($comment_id, $status) { rs_send_log('comment_status_changed', "Kommentar-status: $status", 'comment', $comment_id); }, 10, 2);
Strömavbrott blir allt vanligare och behovet av pålitlig nödström ökar. Med rätt batterilager och generator kan din fastighet fortsätta fungera även när elnätet ligger nere.
Raymond erbjuder lösningar för äkta ö-drift med växelriktare från Solis och Ferroamp. Tillsammans med våra skalbara Solid State-batterier, som klarar kyla och har hög säkerhet, skapas en stabil och framtidssäker energilösning.
Behovet av nödströmslösningar ökar för villaägare, företag och lantbruk. Med rätt system för ö-drift kan din fastighet fortsätta få el även när elnätet ligger nere.
Det första steget är att avgöra vad som är viktigast att driva vid ett avbrott – enstaka kritiska apparater eller hela fastigheten. Detta avgör vilken storlek du behöver på batterilager och generator.
Många växelriktare på marknaden saknar funktioner för strömavbrott. Raymond arbetar därför med lösningar som är byggda för äkta offgrid/ö-drift, vilket gör att din fastighet kan drivas av solceller, batterilager eller generator under längre avbrott.
Vi erbjuder växelriktare från Solis och Ferroamp med generatoringång och ATS-funktion för automatisk start. De ger hög effekt, flexibilitet och möjlighet att bygga ut systemet över tid.
För batterilager är effekt och skalbarhet avgörande. Raymonds Solid State-batterier erbjuder hög kapacitet och klarar låga temperaturer tack vare inbyggda värmeelement.
De använder fasta elektrolyter, vilket ger hög säkerhet och minimerar risken för termisk rusning.
För att installera ö-drift krävs även tekniska lösningar som separat jordtag och reservkraftsomkopplare. Dessa säkerställer att el från batterier eller generatorer inte matas ut på elnätet under strömavbrott.
Med rätt växelriktare, batterilager och reservkraftslösning kan du skydda din fastighet mot strömavbrott och skapa ett robust energisystem för framtiden.
Om det någon som förstår sig på allt detta så är det säljarna på Raymond. De frågor du inte hittar svar på hemsidan tar de hand om. Maila eller ring direkt!
Telefon:
E-post:
Elpriset påverkas av balansen mellan utbud och efterfrågan. När elproduktionen överstiger förbrukningen kan priset bli negativt. Det lägsta uppmätta negativa elpriset hittills är -69 öre per kWh.
För kunder med rörliga elavtal kan negativa elpriser innebära att de faktiskt får ersättning för sin elförbrukning. Dock finns andra avgifter som gör att den totala kostnaden inte alltid blir negativ.
Ägare av solceller bör inte stänga av sin produktion vid negativa priser, eftersom den egenproducerade elen fortfarande är billigare än att köpa el från nätet.
Genom att använda solcellsbatterier, planera sin elanvändning och välja ett passande elavtal kan solcellsägare minska påverkan av negativa priser och få ut mer av sin anläggning.
Med vår lösenordslösa inloggning behöver du inte komma ihåg några lösenord. Istället använder du en engångskod som skickas till din e-postadress för att logga in.

Visa video
Du kan logga in på flera telefoner med samma konto. Följ bara samma steg på varje enhet.
Så länge du startar appen regelbundet behåller du din inloggning. Om du inte använder appen på länge kan du behöva logga in igen genom att få en ny kod skickad till din e-post.
Du kan logga ut via din profilsida i appen. För att logga in igen behöver du bara en ny kod till den epost du vill logga in med.
Ja! Du kan bjuda in en annan användare till din grupp från inställningsvyn.
1. Logga in med den nya användaren.
2. Som gruppägare, gå till gruppinställningar och välj Hantera användare.
3. Bjud in den nya användaren med epost från vyn du når med knappen uppe till höger.
4. Den nya användaren måste bekräfta inbjudan från grupp-vyn.
Koden som kommer till din epost fungerar bara en kort stund. Endast personer med tillgång till din e-post kan logga in på ditt konto. Håll din e-post säker genom att använda ett starkt lösenord och tvåfaktorsautentisering. Utöver lösenordslös inloggning används ofta din epost för att återställa lösenord till tjänster, det är därför av yttersta vikt att du håller din epost säker.
Har du fler frågor? Maila oss på support@raymondsolar.com
För att komma igång, ladda ner appen och registrera dig med den e-postadress som är kopplad till din anläggning. Därefter kan du börja använda appen. Funktionaliteten för styrning och ytterligare funktioner kommer successivt att bli tillgänglig i takt med lanseringar och uppdateringar.
Är du befintlig kund till oss idag? Om så är fallet loggar du in med den mejladressen som du har registrerat hos oss för din anläggning. Är du inte kund hos oss idag så får du vänta tills vi släpper en version för de som ej är kund idag.
Ja det har de.
Det är inte helt garanterat, då kompatibiliteten till viss del beror på hur respektive laddbox hanterar OCPP-protokollet och andra tekniska aspekter. För laddboxar som är svåra att styra via vår lösning undersöker vi möjligheten att istället implementera direktstyrning till själva fordonet. Detta skulle kunna möjliggöra en fungerande lösning även om laddboxen i sig inte är fullt kompatibel.